package com.boil.util;

/**
 * Created by ChenYong on 2016-10-11.
 * <br>
 * DataTables 专用分页实体类。
 */
public class Page2<E> extends Page<E> {
    /**
     * 开始记录数
     */
    private long startResults;

    /**
     * 构造器。
     *
     * @param pageSize     页码
     * @param startResults 开始记录数
     */
    public Page2(int pageSize, long startResults) {
        if (pageSize <= Constants.VALUE_0) {
            pageSize = Constants.VALUE_1;
        }

        this.pageSize = pageSize;

        if (startResults <= Constants.VALUE_L_0) {
            startResults = Constants.VALUE_L_0;
        }

        this.startResults = startResults;
    }

    /**
     * 设置总记录数。
     *
     * @param count 总记录数
     */
    @Override
    public void setCount(long count) {
        this.count = count;

        validate();
    }

    /**
     * 获取开始记录数。
     *
     * @return 开始记录数
     */
    public long getStartRecords() {
        return startResults;
    }

    /**
     * 获取结束记录数。
     *
     * @return 结束记录数
     */
    @Override
    public long getEndRecords() {
        return (startResults + pageSize);
    }

    /**
     * 校验数据，使数据合法化。
     */
    private void validate() {
        // 设置总记录数
        if (count <= Constants.VALUE_L_0) {
            count = Constants.VALUE_L_0;
        }

        // 设置总页数
        if (count == Constants.VALUE_L_0) {
            pages = Constants.VALUE_L_1;
        } else if ((count % pageSize) == Constants.VALUE_L_0) {
            pages = (count / pageSize);
        } else {
            pages = ((count / pageSize) + Constants.VALUE_L_1);
        }

        // 设置开始记录数
        if (startResults > ((pages - Constants.VALUE_1) * pageSize)) {
            startResults = ((pages - Constants.VALUE_1) * pageSize);
        }
    }

    @Override
    public String toString() {
        return "Page2 [startResults=" + startResults + ", count=" + count + ", pages=" + pages + ", pageSize="
                + pageSize + ", params=" + params + ", paramss=" + paramss + ", results=" + results + "]";
    }
}